<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="../css/reset.css">
    <style>
        .wrap {
            margin: 10px;
        }

        .list {
            margin-top: 10px;
            line-height: 40px;
            text-indent: 10px;
            padding: 10px;
            border: 1px dashed orangered;
        }

        .list li {
            border: 1px dashed #333;
            margin-top: 10px;
        }

        .list span,
        .list p {
            display: block;
            border: 1px dashed #333;
            margin-top: 10px;
            background-color: pink;
        }

        /* .list li+li {
            border-top: 0;
        } */
    </style>
</head>

<body>
    <div class="wrap">
        <button>新增元素</button>
        <ul class="list">
            <span>span01</span>
            <p>p01</p>
            <li id="first">01</li>
            <li>02</li>
            <li class="mid">03</li>
            <li>04</li>
            <li asd="asd">05</li>
            <li class="last six">06</li>
            <span>span02</span>
            <p>p02</p>
        </ul>
    </div>
</body>
<script>
    // 事件委托(事件代理)
    // 利用事件冒泡的原理, 把子(代)元素的事件委托给父(代)元素,由父元素代为执行 (前提:同种类型的事件)

    // 事件委托的实现步骤?
    // 1. 给父(代)元素委托同种类型的事件
    // 2. 通过事件源找到触发事件的元素
    // 3. 判断事件的元素 是否是 委托事件的目标元素
    //    a. 如果元素类型不同 => 可以通过标签名判断
    //    b. 如果元素类型相同 => 借助元素的特殊属性(属性节点 元素节点的属性)

    // 事件委托的优点
    // 1. 子元素的事件委托给父元素 => 只给父元素绑定了事件 => 节省内存
    // 2. 可以给未来生成的元素绑定事件 (未来生成:页面加载时没有 后面又动态生成的)
    // 3. 提高了代码的执行效率 代码结构更清晰

    // 注意: 
    // 事件委托 委托的只是子代元素的事件 => 该获取元素概要获取元素

    var addEle = document.getElementsByTagName("button")[0];
    var ul = document.getElementsByClassName("list")[0];
    var liList = ul.getElementsByTagName("li");

    //   点击每一个li  => 打印它的下标和内容   
    ul.onclick = function (e) { // this绑定事件的元素 ul
        var e = e || window.event;
        var target = e.target || e.srcElement;
        // console.log("ul被点击");
        console.log("ul被点击", target);

        if (target.tagName.toLowerCase() === "ul") {
            console.log("点击了自己");
        } else if (target.tagName.toLowerCase() === "span") {
            console.log("点击了span");
        } else if (target.tagName.toLowerCase() === "li") {
            console.log("点击了li");

            var index = Array.from(liList).indexOf(target);
            console.log(index, target.textContent);

            // 对li在进行细分
            if (target.id === "first") {
                console.log("点击了第一个li");
            } else if (target.className === "mid") {
                console.log("点击了第三个li");
            } else if (target.getAttribute("asd") === "asd") {
                console.log("点击了第五个li");
            } else if (target.classList.contains("last")) {
                console.log("点击了第六个li");
            } else if (target.className === "newLi") {
                console.log("点击了新增的li");
            } else {
                console.log("点击了其他的li");
            }



        } else if (target.tagName.toLowerCase() === "p") {
            console.log("点击了p");
        }

    }





    // 点击 新增元素 按钮 => 创建一个li放到list中
    addEle.onclick = function () {
        var li = document.createElement("li");
        li.innerText = "我是新增的li";
        li.setAttribute("class", "newLi");
        li.style.backgroundColor = randColor();
        ul.appendChild(li);
    }



























    function randColor() {
        var colorStr = "0123456789abcdef";  // 16 

        var str = "#";
        for (var i = 0; i < 6; i++) {
            // var index = Math.round(Math.random() * (colorStr.length - 1));
            var index = Math.floor(Math.random() * colorStr.length);
            var char = colorStr.charAt(index);
            str += char;
        }
        return str;
    }





</script>

</html>